package cc.rengu.igas.channel.cups.facade;

import cc.rengu.igas.channel.cups.facade.request.*;
import cc.rengu.igas.channel.cups.facade.response.*;
import cc.rengu.igas.channel.cups.facade.result.Result;

public interface CupsPayService {

    /**
     * 余额查询
     *
     * @param acctBalanceQueryRequest
     * @return 余额查询应答
     * @
     */
    Result<AcctBalanceQueryResponse> acctBalanceQuery(AcctBalanceQueryRequest acctBalanceQueryRequest);

    /**
     * 消费
     *
     * @param consumeRequest
     * @return 消费应答
     * @
     */
    Result<ConsumeResponse> consume(ConsumeRequest consumeRequest);

    /**
     * 消费冲正
     *
     * @param consumeRevsalRequest
     * @return 消费冲正应答
     * @
     */
    Result<ConsumeRevsalResponse> consumeRevsal(ConsumeRevsalRequest consumeRevsalRequest);

    /**
     * 消费撤销
     *
     * @param consumeCancelRequest
     * @return 消费撤销应答
     * @
     */
    Result<ConsumeCancelResponse> consumeCancel(ConsumeCancelRequest consumeCancelRequest);

    /**
     * 消费撤销冲正
     *
     * @param consumeCancelRevsalRequest
     * @return 消费撤销冲正应答
     * @
     */
    Result<ConsumeCancelRevsalResponse> consumeCancelRevsal(ConsumeCancelRevsalRequest consumeCancelRevsalRequest);

    /**
     * 退货
     *
     * @param consumeRefundRequest
     * @return 退货应答
     * @
     */
    Result<ConsumeRefundResponse> consumeRefund(ConsumeRefundRequest consumeRefundRequest);

    /**
     * 预授权
     *
     * @param preAuthRequest
     * @return 预授权应答
     * @
     */
    Result<PreAuthResponse> preAuth(PreAuthRequest preAuthRequest);

    /**
     * 预授权冲正
     *
     * @param preAuthRevsalRequest
     * @return 预授权冲正应答
     * @
     */
    Result<PreAuthRevsalResponse> preAuthRevsal(PreAuthRevsalRequest preAuthRevsalRequest);

    /**
     * 预授权撤销
     *
     * @param preAuthCancelRequest
     * @return 预授权撤销应答
     * @
     */
    Result<PreAuthCancelResponse> preAuthCancel(PreAuthCancelRequest preAuthCancelRequest);

    /**
     * 预授权撤销冲正
     *
     * @param preAuthCancelRevsalRequest
     * @return 预授权撤销冲正应答
     * @
     */
    Result<PreAuthCancelRevsalResponse> preAuthCancelRevsal(PreAuthCancelRevsalRequest preAuthCancelRevsalRequest);

    /**
     * 预授权完成
     *
     * @param preAuthFinishRequest
     * @return 预授权完成应答
     * @
     */
    Result<PreAuthFinishResponse> preAuthFinish(PreAuthFinishRequest preAuthFinishRequest);

    /**
     * 预授权完成冲正
     *
     * @param preAuthFinishRevsalRequest
     * @return 预授权完成冲正应答
     * @
     */
    Result<PreAuthFinishRevsalResponse> preAuthFinishRevsal(PreAuthFinishRevsalRequest preAuthFinishRevsalRequest);

    /**
     * 预授权完成撤销
     *
     * @param preAuthFinishCancelRequest
     * @return 预授权完成撤销应答
     * @
     */
    Result<PreAuthFinishCancelResponse> preAuthFinishCancel(PreAuthFinishCancelRequest preAuthFinishCancelRequest);

    /**
     * 预授权完成撤销冲正
     *
     * @param preAuthFinishCancelRevsalRequest
     * @return 预授权完成撤销冲正应答
     * @
     */
    Result<PreAuthFinishCancelRevsalResponse> preAuthFinishCancelRevsal(PreAuthFinishCancelRevsalRequest preAuthFinishCancelRevsalRequest);


    /**
     * 余额查询
     *
     * @param request 余额查询请求
     * @return 余额查询应答
     * @throws Exception 非业务失败
     */
    Result<AcctBalanceQueryResponse> cupsAcctBalanceQueryService(AcctBalanceQueryRequest request) throws Exception;

    /**
     * 取现
     *
     * @param request 取现请求
     * @return 取现应答
     * @throws Exception 非业务失败
     */
    Result<EnchashmentResponse> cupsEnchashmentService(CupsACRequest request) throws Exception;

    /**
     * 取现冲正
     *
     * @param request 取现冲正请求
     * @return 取现冲正应答
     * @throws Exception 非业务失败
     */
    Result<EnchashmentRevsalResponse> cupsEnchashmentRevsalService(EnchashmentRevsalRequest request) throws Exception;

    /**
     * 账户验证
     *
     * @param request 账户验证请求
     * @return 账户验证应答
     * @throws Exception 非业务失败
     */
    Result<AcctVerifyResponse> cupsAcctVerifyService(AcctVerifyRequest request) throws Exception;

    /**
     * 指定账户圈存
     *
     * @param request 指定账户圈存请求
     * @return 指定账户圈存应答
     * @throws Exception 非业务失败
     */
    Result<TrapResponse> cupsTrapService(TrapRequest request) throws Exception;

    /**
     * 指定账户圈存冲正
     *
     * @param request 指定账户圈存冲正请求
     * @return 指定账户圈存冲正应答
     * @throws Exception 非业务失败
     */
    Result<TrapRevsalResponse> cupsTrapRevsalService(TrapRevsalRequest request) throws Exception;

    /**
     * 非指定账户圈存
     *
     * @param request 非指定账户圈存请求
     * @return 非指定账户圈存应答
     * @throws Exception 非业务失败
     */
    Result<TransferTrapResponse> cupsTransferTrapService(TransferTrapRequest request) throws Exception;

    /**
     * 非指定账户圈存冲正
     *
     * @param request 非指定账户圈存冲正请求
     * @return 非指定账户圈存冲正应答
     * @throws Exception 非业务失败
     */
    Result<TransferTrapRevsalResponse> cupsTransferTrapRevsalService(TransferTrapRevsalRequest request) throws Exception;

    /**
     * 转账
     *
     * @param request 转账请求
     * @return 转账应答
     * @throws Exception 非业务失败
     */
    Result<TransferResponse> cupsTransferService(TransferRequest request) throws Exception;

    /**
     * 转账转出撤销
     *
     * @param request 转账转出撤销请求
     * @return 转账转出撤销应答
     * @throws Exception 非业务失败
     */
    Result<TransferOutCancelResponse> cupsTransferOutCancelService(TransferOutCancelRequest request) throws Exception;

    /**
     * 脚本结果通知
     *
     * @param request 脚本结果通知请求
     * @return 脚本结果通知应答
     * @throws Exception 非业务失败
     */
    Result<ScriptResultNoticeResponse> scriptResultNotice(ScriptResultNoticeRequest request) throws Exception;

    /**
     * 存款
     *
     * @param request 存款请求
     * @return 存款应答
     * @throws Exception 非业务失败
     */
    Result<DepositResponse> cupsDepositService(DepositRequest request) throws Exception;

    /**
     * 存款撤销
     *
     * @param request 存款撤销请求
     * @return 存款撤销应答
     * @throws Exception 非业务失败
     */
    Result<DepositCancelResponse> cupsDepositCancelService(DepositCancelRequest request) throws Exception;

    /**
     * 受理侧存款确认
     *
     * @param request 受理侧存款确认请求
     * @return 存款确认应答
     * @throws Exception 非业务失败
     */
    Result<DepositConfirmResponse> cupsDepositConfirmService(DepositConfirmRequest request) throws Exception;

    /**
     * 受理侧存款撤销冲正
     *
     * @param request 受理侧存款撤销冲正请求
     * @return 存款撤销冲正应答
     * @throws Exception 非业务失败
     */
    Result<DepositCancelRevsalResponse> cupsDepositCancelRevsalService(DepositCancelRevsalRequest request) throws Exception;

    /**
     * 受理侧签约结果通知
     *
     * @param request 签约结果通知请求
     * @return 签约结果通知应答
     * @throws Exception 非业务失败
     */
    Result<SignResultNoticeResponse> cupsSignResultNoticeService(SignResultNoticeRequest request) throws Exception;

    /**
     * 受理侧单位token解约
     *
     * @param request 签约结果通知请求
     * @return 签约结果通知应答
     * @throws Exception 非业务失败
     */
    Result<TokenSignOffNoticeResponse> tokenSignOffNoticeService(TokenSignOffNoticeRequest request) throws Exception;


}
